/**
 * 封装 axios 请求模块
 */

import axios from 'axios'
import store from '@/store'
import JSONBig from 'json-bigint'

// JSONBig 可以处理数据中超出 Javascript 安全整数范围的问题
// JSONBig.parse()     // 把 JSON 格式的字符串转为 Javascript 对象
// 注意：JSONBig.parse() 处理之后是一个对象，如果后续使用，需要再转换一次

// JSONBig.stringify() // 把 Javascript 对象转为 JSON 格式的字符串

const request = axios.create({
  baseURL: process.env.VUE_APP_BASE_URL, // 接口的基准路径
  timeout: 30000,

  // 自定义后端返回的原始数据
  // data:后端返回的还没有被处理的原始JSON数据
  transformResponse: [
    function(data) {
      try {
        return JSONBig.parse(data)
      } catch (err) {
        return data
      }
    }
  ]
})

// 请求拦截,注意：初始应该是axios.interceptors.request.use，因为上面我们已经定义了，所以这边应该
request.interceptors.request.use(
  config => {
    // 请求发起会经过这里
    // config：本次请求的请求配置对象
    // return config
    const { user } = store.state
    if (user && user.token) {
      config.headers.Authorization = `Bearer ${store.state.user.token}`
    }

    // 注意：这里务必要返回 config
    return config
  },
  error => {
    // 请求出错（还没发出去），会进入这里
    return Promise.reject(error)
  }
)
// 响应拦截
request.interceptors.response.use(
  res => {
    return res
  },
  error => {
    return Promise.reject(error)
  }
)

export default request
